/**
 * 版权所有 2009-2012山东新北洋信息技术股份有限公司
 * 保留所有权利。
 */
package com.linyaonan.leetcode.easy._350;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @ProjectName: leetcode
 * @Package: com.linyaonan.leetcode.easy._350
 * @ClassName: IntersectionOfTwoArraysII
 * @Author: linyaonan
 * @Date: 2019/12/23 15:35
 */
public class IntersectionOfTwoArraysII {
    public int[] intersection(int[] nums1, int[] nums2) {
        int[] nullNums = new int[]{};
        if (nums1 == null || nums2 == null) {
            return nullNums;
        }
        if (nums1.length == 0|| nums2.length == 0) {
            return nullNums;
        }
        // 用于保存想等结果
        List<Integer> saveList = new ArrayList<>();
        // 将原数组进行升序排序
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        // 两个计算游标
        int index1 = 0;
        int index2 = 0;
        while (index1 <nums1.length && index2 < nums2.length) {
            int nums1Start = nums1[index1];
            int nums2Start = nums2[index2];
            // 如果指针对应的数值相等
            if (nums1Start == nums2Start) {
                saveList.add(nums1Start);
                index1++;
                index2++;
            } else {
                // 第一位不相等，找出较小的值
                if (nums1Start < nums2Start) {
                    // 第一位较小，移动第一位
                    index1++;
                } else {
                    // 移动第二位
                    index2++;
                }
            }
        }
        int[] result = new int[saveList.size()];
        for (int i = 0; i < saveList.size(); i++) {
            result[i] = saveList.get(i);
        }
        return result;
    }
}
